/*
 * @Author: szx
 * @Date: 2022-01-20 15:06:42
 * @LastEditTime: 2022-01-20 15:25:19
 * @Description: 
 * @FilePath: \leetcode\100-199\123\123.js
 */
/**
 * @param {number[]} prices
 * @return {number}
 */
//  一天一共就有五个状态，
//  0没有操作
//  1第一次买入
//  2第一次卖出
//  3第二次买入
//  4第二次卖出
//  dp[i][j]中 i表示第i天，j为 [0 - 4] 五个状态，dp[i][j]表示第i天状态j所剩最大现金。
var maxProfit = function (prices) {
    const n = prices.length;
    const dp = new Array(n).fill(0).map(() => new Array(5).fill(0));
    dp[0][1] = -prices[0];
    dp[0][3] = -prices[0];
    for (let i = 1; i < n; i++) {
        dp[i][0] = dp[i][0];
        dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i])
        dp[i][2] = Math.max(dp[i - 1][2], dp[i - 1][1] + prices[i])
        dp[i][3] = Math.max(dp[i - 1][3], dp[i - 1][2] - prices[i])
        dp[i][4] = Math.max(dp[i - 1][4], dp[i - 1][3] + prices[i])
    }
    return dp[n - 1][4];
};